// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.SQLUtils;
// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.ast.statement.SQLExplainStatement;
// import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;
#pragma once
#include "../../../../ast/statement/SQLExplainStatement.h"
#include "MySqlStatement.h"

class MySqlExplainStatement : virtual public SQLExplainStatement, virtual public MySqlStatement
{
public:
  BOOL_ptr describe;
  SQLName_ptr tableName;
  SQLName_ptr columnName;
  SQLExpr_ptr wild;
  SQLExpr_ptr connectionId;

  BOOL_ptr distributeInfo; // for ads

  MySqlExplainStatement();

  MySqlExplainStatement(DbType_ptr dbType);
  SHAREDOBJECT(MySqlExplainStatement);
  // @Override
  void accept0(MySqlASTVisitor_ptr visitor);

  void accept0(SQLASTVisitor_ptr visitor);

  string_ptr toString();

  BOOL_ptr isDescribe();

  void setDescribe(BOOL_ptr describe);

  SQLName_ptr getTableName();

  void setTableName(SQLName_ptr tableName);

  SQLName_ptr getColumnName();

  void setColumnName(SQLName_ptr columnName);

  SQLExpr_ptr getWild();

  void setWild(SQLExpr_ptr wild);

  SQLExpr_ptr getConnectionId();

  void setConnectionId(SQLExpr_ptr connectionId);

  BOOL_ptr isDistributeInfo();

  void setDistributeInfo(BOOL_ptr distributeInfo);
};
